#pragma once

class StackTrace
{
	std::vector<StackFrame*> m_frames;
	friend std::ostream& operator << (std::ostream& strm, const StackTrace& trace);

	// We have a non trivial destructor -> mark copy constructor and operator =
	// as private or implement them so that copying is done correctly
	StackTrace(StackTrace&) { }
	void operator=(StackTrace&) { }
public:
	StackTrace(CONTEXT& ctx);
	~StackTrace();
};

std::ostream& operator << (std::ostream& strm, const StackTrace& trace);